import axios from 'axios'
import { ElMessage } from 'element-plus';
import config from "@/config";
import { useAllDataStore } from '@/stores/index'

const service = axios.create({
    baseURL: config.baseApi,
});

// const NET_ERROR_MSG = '网络请求失败';
// // 添加请求拦截器
// service.interceptors.request.use(function (config) {
//     // 在发送请求之前做些什么
//     return config;
// }, function (error) {
//     // 对请求错误做些什么
//     return Promise.reject(error);
// }); 

service.interceptors.request.use(function (config) {
    // 从 store 获取 token
    const store = useAllDataStore();
    const token = store.state.token;
    
    // 如果有 token，添加到请求头
    if (token) {
        config.headers['token'] = token;
    }
    
    return config;
}, function (error) {
    return Promise.reject(error);
}); 

// 添加响应拦截器
service.interceptors.response.use(
    (res)=> {
        const {code, data, msg} = res.data;
        // console.log(code, data, msg);
        if (code === 1) {
            return res.data;
        } else {
            ElMessage.error(msg || NET_ERROR_MSG);
            //有就message，没有就NET_ERROR_MSG
            return Promise.reject(new Error(msg || NET_ERROR_MSG));
        }
    },
);

function request(options) {

    // options.method = options.method || 'get';

    //关于get请求参数调整
    // axios默认会对get请求传params,不是data
    if(options.method.toLowerCase() === 'get') {
        options.params = options.data;
        // console.log(options);
        // console.log(options.params);
    }

    //对mock的开关做一个处理
    let isMocck = config.mock;
    if(typeof options.mock !== 'undefined')
    {
        isMocck = options.mock;
    }

    //针对环境做处理
    if(config.env === 'prod' )
    {
        service.defaults.baseURL = config.baseApi;
    }else{
        service.defaults.baseURL = isMocck? config.mockApi : config.baseApi;
    }
    return service(options);
    console.log(service(options));

}

export default request;